package cn.wzut.edut.service;

import cn.wzut.edut.dao.inf.Dept;
import cn.wzut.edut.dao.pojo.table.SysDept;
import cn.wzut.edut.dao.pojo.table.SysDeptUserRel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.*;

@Service
public class DeptService {

    @Autowired
    Dept dept;

    public boolean createCollege(String userId, String deptName){
        return dept.insertDept(new SysDept(null, deptName, null, "学院", userId, "1"));
    }

    public boolean createDept(String userId, String deptName, String parentId, String deptType){
        return dept.insertDept(new SysDept(null, deptName, parentId, deptType, userId, "1"));
    }

    public boolean delDept(String[] deptId){
        List<String> dept_id = Arrays.asList(deptId);
        return dept.delSysDeptList(dept_id, null, null, null, null, null);
    }

    public boolean updateDeptUser(String deptId, String[] addUserIds, String[] delUserIds){
        // 组织新增用户
        List<SysDeptUserRel> sysDeptUserRelList = new ArrayList<>();
        for(String addUserId : addUserIds){
            sysDeptUserRelList.add(new SysDeptUserRel(null, deptId, addUserId));
        }
        dept.insertUserDeptList(sysDeptUserRelList);
        // 组织删除用户
        List<String> dept_id = Arrays.asList(deptId);
        List<String> user_id = Arrays.asList(delUserIds);
        dept.delSysDeptUserList(null, dept_id, user_id);
        return true;
    }

    public boolean updateDeptInfo(String deptId, String deptName){
        return dept.updateDept(deptId, deptName);
    }

    /**
     * 获取学院列表
     * @param current
     * @param size
     * @return
     */
    public Map<String, Object> getCollege(long current, long size){
        //返回字典
        Map<String, Object> data = new HashMap<>();
        data.put("sysDeptList", dept.selectSysDeptPage(null, null, null, "学院", null, null, current, size));
        data.put("sysDeptCount", dept.countSysDept(null, null, null, "学院", null, null));
        return data;
    }

    /**
     * 获取班级列表
     * @param userId
     * @param current
     * @param size
     * @return
     */
    public Map<String, Object> getDeptByUser(String userId, long current, long size){
        //返回字典
        Map<String, Object> data = new HashMap<>();
        List<String> dept_type = Arrays.asList(new String[]{"虚拟班级", "行政班级", "教师组"});
        data.put("sysDeptList", dept.selectSysDeptListPage(null, null, null, dept_type, Arrays.asList(userId), null, current, size));
        data.put("sysDeptCount", dept.countSysDeptList(null, null, null, dept_type, Arrays.asList(userId), null));
        return data;
    }

    public Map<String, Object> getDeptByNameAndType(String deptName, String deptType, long current, long size){
        //返回字典
        Map<String, Object> data = new HashMap<>();
        data.put("sysDeptList", dept.selectSysDeptPage(null, deptName, null, deptType, null, null, current, size));
        data.put("sysDeptCount", dept.countSysDept(null, deptName, null, deptType, null, null));
        return data;
    }

    public Map<String, Object> getAllClassAndDept(){
        String[] deptType = new String[]{"学院", "行政班级", "虚拟班级"};
        List<String> deptTypeList = Arrays.asList(deptType);
        //返回字典
        Map<String, Object> data = new HashMap<>();
        data.put("sysDeptList", dept.selectSysDeptList(null, null, null, deptTypeList, null, null));
        data.put("sysDeptCount", dept.countSysDeptList(null, null, null, deptTypeList, null, null));
        return data;
    }

    public Map<String, Object> getAllGroupAndDept(){
        String[] deptType = new String[]{"学院", "教师组"};
        List<String> deptTypeList = Arrays.asList(deptType);
        //返回字典
        Map<String, Object> data = new HashMap<>();
        data.put("sysDeptList", dept.selectSysDeptList(null, null, null, deptTypeList, null, null));
        data.put("sysDeptCount", dept.countSysDeptList(null, null, null, deptTypeList, null, null));
        return data;
    }

    public Map<String, Object> getCollegeAndClass(){
        String[] deptType = new String[]{"学院", "行政班级", "虚拟班级"};
        List<String> deptTypeList = Arrays.asList(deptType);
        //返回字典
        Map<String, Object> data = new HashMap<>();
        data.put("sysDeptList", dept.selectSysDeptList(null, null, null, deptTypeList, null, null));
        data.put("sysDeptCount", dept.countSysDeptList(null, null, null, deptTypeList, null, null));
        return data;
    }








//    /**
//     * 获取所有学院
//     * @param token
//     * @return
//     */
//    public List<SysDept> getAllCollege(String token){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            //返回列表
//            return dept.selectAllController();
//        }
//        throw new ServiceException(-1, "获取学院列表失败（无权调用）");
//    }
//
//    /**
//     * 获取当前学院的班级
//     * @param token
//     * @return
//     */
//    public List<SysDept> getClassByCollege(String token, String name){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            return dept.selectClassInController(name);
//        }
//        throw new ServiceException(-1, "获取学院列表失败（无权调用）");
//    }
//
//    /**
//     * 更新学院信息
//     *
//     * @param token
//     * @return
//     */
//    public boolean updateDeptInfo(String token, String id, String name){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            return dept.updateDept(id, name);
//        }
//        throw new ServiceException(-1, "获取学院列表失败（无权调用）");
//    }
//
//
//
//    /**
//     * 通过组织名获取组织列表
//     * @param token
//     * @return
//     */
//    public List<SysDept> getDeptByName(String token, String name){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            //返回列表
//            return dept.selectDeptInName(name);
//        }
//        throw new ServiceException(-1, "获取组织列表失败（无权调用）");
//    }
//
//    /**
//     * 增加组织
//     * @param token
//     * @return
//     */
//    public boolean addDept(String token, String dept_name, String type){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            //返回列表
//            return dept.insertDept(new SysDept("1", dept_name, null, type, decode.getClaim("userid").asString(), "1"));
//        }
//        throw new ServiceException(-1, "增加组织失败（无权调用）");
//    }
//
//    /**
//     * 添加人员
//     *
//     * @param token
//     * @return
//     */
//    public boolean addUserToDept(String token, String deptid, String[] userids){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            //返回列表
//            for(String userid : userids){
//                dept.insertUserDept(userid, deptid);
//            }
//            return true;
//        }
//        throw new ServiceException(-1, "添加用户失败（无权调用）");
//    }
//
//    /**
//     * 移除人员
//     *
//     * @param token
//     * @return
//     */
//    public boolean delUserToDept(String token, String deptid, String[] userids){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            //返回列表
//            for(String userid : userids){
//                dept.delUserDept(userid, deptid);
//            }
//            return true;
//        }
//        throw new ServiceException(-1, "移除用户失败（无权调用）");
//    }
//
//    /**
//     * 删除组织
//     *
//     * @param token
//     * @return
//     */
//    public boolean delDept(String token, String deptid[]){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            for(String id : deptid){
//                dept.delDept(id);
//            }
//            return true;
//        }
//        throw new ServiceException(-1, "移除用户失败（无权调用）");
//    }
//
//    /**
//     * 凭借组织id和用户名查询组织内用户
//     *
//     * @param token
//     * @return
//     */
//    public List<SysUser> getUserByDeptAndName(String token, String real_name, String dept_id, long current, long size){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            return dept.selectUserInDeptInUserNamePage(real_name, dept_id, current, size);
//        }
//        throw new ServiceException(-1, "移除用户失败（无权调用）");
//    }
//
//    /**
//     * 获取组织内用户
//     *
//     * @param token
//     * @return
//     */
//    public List<SysUser> getUserByDeptId(String token, String dept_id, long current, long size){
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if(true){
//            return dept.selectUserInDept(dept_id, current, size);
//        }
//        throw new ServiceException(-1, "获取用户列表失败（无权调用）");
//    }

}
